package com.c5p1ng.leetcode.editor.cn;

//给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。 
//
// 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "hello"
//输出："holle"
// 
//
// 示例 2： 
//
// 
//输入：s = "leetcode"
//输出："leotcede" 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 3 * 105 
// s 由 可打印的 ASCII 字符组成 
// 
// Related Topics 双指针 字符串 
// 👍 236 👎 0

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class ReverseVowelsOfAString{
    public static void main(String[] args) {
        Solution solution = new ReverseVowelsOfAString().new Solution();
        
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {

     private final Set<Character> vowels = new HashSet<>(
             Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')
     );

    public String reverseVowels(String s) {
       if(s == null) {
           return null;
       }
       int i = 0, j = s.length() - 1;
       char[] result = new char[s.length()];
       while (i <= j) {
           char ci = s.charAt(i);
           char cj = s.charAt(j);
           if(!vowels.contains(ci)) {
               result[i++] = ci;
           } else if(!vowels.contains(cj)) {
               result[j--] = cj;
           } else {
               result[i++] = cj;
               result[j--] = ci;
           }
       }
       return new String(result);
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}